// 接口是个约束，里面是一些方法和功能，需要去实现
interface Person {
    // 只读属性
    readonly id: number;
    name: string;
    age: number;
    // 可选属性
    sex?: string

    // 任意属性
    [property: string]: any
}

let longmo: Person = {
    id: 0,
    name: 'Longmo',
    age: 25,
    ts: 1
}

// longmo.id = 8888


// 通过接口定义函数的形状
interface SearchResult {
    (source: string, subString: string): boolean
}

let mySearchResult: SearchResult
mySearchResult = function (source: string, subString: string) {
    return source.search(subString) !== -1
}

// 接口可以继承接口
interface Alarm {
    alert(): void
}

interface LightableAlarm extends Alarm {
    lightOn(): void;

    lightOff(): void

}

// 我们在定义接口的时候只做定义，具体的实现通过继承接口的类去实现！
// 类可以实现接口

// 接口的合并 - 类型相同才能合并，类型不同不能合并
interface Alarm {
    name: string
}

